//
//  NSDate+Extension.swift
//  59.时间处理
//
//  Created by shenzhenIOS on 16/4/17.
//  Copyright © 2016年 shenzhenIOS. All rights reserved.
//

import Foundation

extension NSDate {
    
    /// 将新浪返回的时间字符串,转成系统的NSDate
    /// 不要创建对象就能调用
    class func date(sinaString: String) -> NSDate {
        // 将新浪返回的时间字符串,转成系统的NSDate, 后面才好比较
        let df = NSDateFormatter()
        
        // 指定字符串的格式
        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        // 真机需要指定
        df.locale = NSLocale(localeIdentifier: "EN")
        
        // 将字符串转成NSDate, NSDate在打印的时候是以0时区来打印
        let date = df.dateFromString(sinaString) ?? NSDate()

        return date
    }
    
    // 根据时间的需求返回不同的字符串, 和当前时间比较
    ///  返回日期描述字符串
    ///
    ///     格式如下
    ///     -   刚刚(一分钟内)
    ///     -   X分钟前(一小时内)
    ///     -   X小时前(当天)
    ///     -   昨天 HH:mm(昨天)
    ///     -   MM-dd HH:mm(一年内)
    ///     -   yyyy-MM-dd HH:mm(更早期)
    /// self 是新浪的时间, 新兰返回的字符串转成NSDate 新浪的时间来调用sinaDateDescription
    func sinaDateDescription() -> String {
        // 时间比较, NSCalendar 专门处理时间的
        let calendar = NSCalendar.currentCalendar()
        
        // 当天
        if calendar.isDateInToday(self) {
            // 新浪时间和系统当前时间相差秒数
            let delta = Int(NSDate().timeIntervalSinceDate(self))
            
            // 一分钟内
            if delta < 60 {
                return "刚刚"
            }
            
            // 一小时内
            if delta < 60 * 60 {
                // X分钟前
                return "\(delta / 60) 分钟前"
            }
            
            // 当天
            // X小时前
            return "\(delta / 60 / 60) 小时前"
        }
        
        // 后面3中需要时间格式化
        var dateFormat = ""
        
        // 昨天
        if calendar.isDateInYesterday(self) {
            print("昨天")
            dateFormat = "昨天 HH:mm"
        } else if calendar.compareDate(self, toDate: NSDate(), toUnitGranularity: NSCalendarUnit.Year) == NSComparisonResult.OrderedSame {
            // 一年内
            /// 比较时间, 新浪时间和当前时间比较, 相同
            /// date1: NSDate
            /// toDate: NSDate
            /// toUnitGranularity 比较的单位
            /// NSDate(): 系统当前时间
            print("一年内")
            dateFormat = "MM-dd HH:mm"
        } else {
            print("更早期")
            dateFormat = "yyyy-MM-dd HH:mm"
        }
        
        // 时间格式化,将新浪NSDate,转成特殊的字符串
        let df = NSDateFormatter()
        
        // 指定转换的格式
        df.dateFormat = dateFormat
        df.locale = NSLocale(localeIdentifier: "EN")
        
        // 将新浪NSDate,转成特殊的字符串
        let dateString = df.stringFromDate(self)
        return dateString
    }
}
